package devices

import (
	"yundian/internel/app/models/devrule"
	"yundian/internel/app/models/prices"
	"yundian/internel/pkg/dingo"
)

// Device Model
type DeviceModel struct {
	ID             int    `gorm:"column:id" json:"id"`                       //
	DeviceSn       string `gorm:"column:device_sn" json:"deviceSn"`          // 设备标识SN
	PreSn          string `gorm:"column:pre_sn" json:"preSn"`                // 设备标识SN
	DeviceTypeId   int    `gorm:"column:device_type_id" json:"deviceTypeId"` // 设备类型ID
	DeviceTypeName string `gorm:"column:device_type_name" json:"deviceTypeName"`

	PwdIndex      uint8  `gorm:"column:pwd_index" json:"pwdIndex"`            // 密码序号
	PwdSecretKey  string `gorm:"column:pwd_secret_key" json:"pwdSecretKey"`   // 密码解码key
	PwdDecodeType string `gorm:"column:pwd_decode_type" json:"pwdDecodeType"` // 密码解锁类型

	ProdType uint8 `gorm:"column:prod_type" json:"prodType"`

	State uint8 `gorm:"column:state" json:"state"` // 状态 1:未启用 2:已部署 3:工作中 4:已报修

	SharedMode string `gorm:"column:shared_mode" json:"sharedMode"` // 共享模式  pcl密码线 cdb充电宝 zdsm 自动售货机
	FeeMode    uint8  `gorm:"column:fee_mode" json:"feeMode"`       // 费用模式 1:预付费 2:普通
	UseCount   int    `gorm:"column:use_count" json:"useCount"`

	PlaceId       int    `gorm:"column:place_id" json:"placeId"`              // 网点ID
	PlaceName     string `gorm:"column:place_name" json:"placeName"`          // 网点名称
	AgentUserId   int    `gorm:"column:agent_user_id" json:"agentUserId"`     // 代理商用户ID
	AgentUserName string `gorm:"column:agent_user_name" json:"agentUserName"` // 代理商名称
	DomainUrl     string `gorm:"column:domain_url" json:"domainUrl"`          // 二维码规则

	DeployAt dingo.Time `gorm:"column:deploy_at" json:"deployAt"` // 部署日期
	CreateAt dingo.Time `gorm:"column:create_at" json:"createAt"` // 创建日期
	UpdateAt dingo.Time `gorm:"column:update_at" json:"updateAt"` // 修改日期
	Sn       int        `gorm:"column:sn" json:"sn"`              // 添加设备批次序列号
	Url      int        `gorm:"column:url" json:"url"`            // 0(device.yundian.ink) 新创建的 1 天海(dev.yundian.ink) 2 天海(dev.thlmsz.vip)
	//is_tianhai
	Room         string `gorm:"column:room" json:"room"`
	BluetoothMac string `gorm:"column:bluetooth_mac" json:"bluetoothMac"`
}

// DeviceWithType
type DeviceType struct {
	DeviceModel
	DeviceModelId string `json:"deviceModelId"` // 设备型号
	DeviceName    string `json:"deviceName"`    // 设备名

	UserNo         string              `gorm:"-" json:"userNo"`         //
	MaintainerName string              `gorm:"-" json:"maintainerName"` // 维护者
	RuleInfo       []prices.PriceModel `gorm:"-" json:"ruleInfo"`       // 设备计费规则
}

type DeviceWithPlaceInfo struct {
	SharedMode     string `gorm:"column:shared_mode" json:"sharedMode"`
	DeviceTypeId   int    `gorm:"column:device_type_id" json:"deviceTypeId"` // 设备类型ID
	DeviceTypeName string `gorm:"column:device_type_name" json:"deviceTypeName"`
	DeviceSn       string `gorm:"column:device_sn" json:"deviceSn"` // 设备标识SN

	PlaceId      int    `gorm:"column:place_id" json:"placeId"`
	PlaceName    string `gorm:"column:place_name" json:"placeName"`
	ProjectLabel string `gorm:"project_label" json:"projectLabel"`
}

type DeviceANDIdWithPlaceInfo struct {
	Id        int    `gorm:"primary_key;column:id" json:"id"`
	PlaceName string `gorm:"column:place_name" json:"placeName"` // 商户名称
	UserID    int    `gorm:"column:user_id" json:"userId"`       // 用户ID
	Address   string `gorm:"column:address" json:"address"`
	Room      string `gorm:"column:room" json:"room"`
}

// 微信小程序获取设备详情
type DeviceWithPlace struct {
	ID             int    `gorm:"column:id" json:"id"`                       //
	DeviceSn       string `gorm:"column:device_sn" json:"deviceSn"`          // 设备标识SN
	PreSn          string `gorm:"column:pre_sn" json:"preSn"`                // 设备标识SN
	DeviceTypeId   int    `gorm:"column:device_type_id" json:"deviceTypeId"` // 设备类型ID
	DeviceTypeName string `gorm:"column:device_type_name" json:"deviceTypeName"`
	PwdDecodeType  string `gorm:"column:pwd_decode_type" json:"pwdDecodeType"`

	SharedMode string `gorm:"column:shared_mode" json:"sharedMode"` // 共享模式  pcl密码线 cdb充电宝 zdsm 自动售货机
	FeeMode    uint8  `gorm:"column:fee_mode" json:"feeMode"`       // 费用模式 1:预付费 2:普通

	PlaceId       int    `gorm:"column:place_id" json:"placeId"`     // 网点ID
	PlaceName     string `gorm:"column:place_name" json:"placeName"` // 网点名称
	IsAd          int    `gorm:"is_ad" json:"isAd"`                  // 是否显示广告
	IsAdBanner    int    `gorm:"is_ad_banner" json:"isAdBanner"`     //是否展示广告
	HotelId       string `gorm:"column:hotel_id" json:"hotelId"`     // 携程酒店ID
	DeviceModelId string `json:"deviceModelId"`                      // 设备型号
	DeviceName    string `json:"deviceName"`                         // 设备名

	Url     string `gorm:"column:url" json:"url"`         // 美团跳转地址
	Banners string `gorm:"column:banners" json:"banners"` // 美团banner

	Province string `gorm:"column:province" json:"province"` // 用户所在省份
	City     string `gorm:"column:city" json:"city"`         // 用户所在城市
	County   string `gorm:"column:county" json:"county"`     // 用户所在县
	Country  string `gorm:"column:country" json:"country"`   // 国家
	Address  string `gorm:"column:address" json:"address"`

	IsBusiness uint8 `gorm:"column:is_business" json:"isBusiness"`
	ProdType   uint8 `gorm:"column:prod_type" json:"prodType"`

	BluetoothMac string `gorm:"column:bluetooth_mac" json:"bluetoothMac"`
	ServiceCall  string `gorm:"column:service_call" json:"serviceCall"`
	IsSteward    uint8  `gorm:"column:is_steward" json:"isSteward"`
	IsOpen       uint8  `gorm:"column:is_open" json:"isOpen"`
	Room         string `gorm:"column:room" json:"room"`
	ProjectLabel string `gorm:"project_label" json:"projectLabel"`

	RuleInfo      []prices.PriceModel `gorm:"-" json:"ruleInfo"` // 设备计费规则
	ServiceConfig string              `gorm:"column:service_config" json:"serviceConfig"`

	WifiName     string `gorm:"-" json:"wifiName"`
	WifiPassword string `gorm:"-" json:"wifiPassword"`

	AutomateGoodsList interface{} `gorm:"-" json:"automateGoodsList"`
}

// 获取公众号商户名下的设备列表，显示固定列
type DeviceTypeByPlace struct {
	DeviceSn       string `gorm:"column:device_sn" json:"deviceSn"`              // 设备标识SN
	PreSn          string `gorm:"column:pre_sn" json:"preSn"`                    // 设备标识SN
	DeviceTypeId   int    `gorm:"column:device_type_id" json:"deviceTypeId"`     // 设备类型ID
	DeviceTypeName string `gorm:"column:device_type_name" json:"deviceTypeName"` //
	SharedMode     string `gorm:"column:shared_mode" json:"sharedMode"`          // 共享模式  pcl密码线 cdb充电宝 zdsm 自动售货机
	PlaceId        int    `gorm:"column:place_id" json:"placeId"`                // 所属商户ID
	PlaceName      string `gorm:"column:place_name" json:"placeName"`            //

	State uint8 `gorm:"column:state" json:"state"` // 状态 1:未启用 2:已部署 3:工作中 4:已报修

	DeployAt dingo.Time `gorm:"column:deploy_at" json:"deployAt"` // 部署日期
	CreateAt dingo.Time `gorm:"column:create_at" json:"createAt"` // 创建日期
	UpdateAt dingo.Time `gorm:"column:update_at" json:"updateAt"` // 修改日期
}

type DeviceTypeIdByPlace struct {
	DeviceTypeId int                 `gorm:"column:device_type_id" json:"deviceTypeId"` // 设备类型ID
	RuleInfo     []prices.PriceModel `gorm:"-" json:"ruleInfo"`                         // 设备计费规则
}

// DeviceWithRule
type DeviceRule struct {
	DeviceModel
	RuleInfo []*devrule.DeviceRulesModel `json:"ruleInfo"` // 设备规则
}

// DeviceWithRule
type DeviceTotal struct {
	DeviceTypeId   int    `gorm:"column:device_type_id" json:"deviceTypeId"` // 设备类型ID
	DeviceTypeName string `gorm:"column:device_type_name" json:"deviceTypeName"`

	SharedMode string `gorm:"column:share_mode" json:"shareMode"` // 共享模式  pcl密码线 cdb充电宝

	DeviceTotal int `gorm:"column:deviceTotal" json:"deviceTotal"` // 各代理商的设备数
}

type DevicePreNum struct {
	PreSn        string `gorm:"column:pre_sn" json:"preSn"`
	FeeMode      uint8  `gorm:"column:fee_mode" json:"feeMode"`            // 费用模式 1:计时模式 2:套餐模式
	DeviceTypeId int    `gorm:"column:device_type_id" json:"deviceTypeId"` // 设备类型ID
}

// model init
func New() *DeviceModel {
	return &DeviceModel{}
}

// TableName
func (m *DeviceModel) TableName() string {
	return "devices"
}

func (m *DeviceModel) Mutate(attrs ...DeviceAttr) *DeviceModel {
	DeviceAttrs(attrs).Apply(m)
	return m
}

type OldDevices struct {
	Id                int    `gorm:"column:id" json:"id"`
	DeviceSn          string `gorm:"column:device_sn" json:"deviceSn"`
	PlaceID           int    `gorm:"column:place_id" json:"placeId,omitempty"`
	DeviceTypeID      int    `gorm:"column:device_type_id" json:"deviceTypeId"`
	PwdIndex          int    `gorm:"column:pwd_index" json:"pwdIndex"`
	PwdDecodeType     string `gorm:"column:pwd_decode_type" json:"pwdDecodeType"`
	PwdSecretKey      string `gorm:"column:pwd_secret_key" json:"pwdSecretKey"`
	CurrentTradeNo    string `gorm:"column:current_trade_no" json:"currentTradeNo,omitempty"`
	CurrentTradeState int    `gorm:"column:current_trade_state" json:"currentTradeState"`
	UseCount          int    `gorm:"column:use_count" json:"useCount"`
	State             int    `gorm:"column:state" json:"state"`
	DeployDate        int64  `gorm:"column:deploy_at" json:"deployDate,omitempty"`
	UpdateDate        int64  `gorm:"column:update_at" json:"updateDate"`
	CreateDate        int64  `gorm:"column:create_at" json:"createDate"`
	PlaceName         string `gorm:"column:place_name" json:"placeName,omitempty"`
	SharedMode        string `gorm:"column:shared_mode" json:"sharedMode"`
	FeeMode           int    `gorm:"column:fee_mode" json:"feeMode"`
	DeviceTypeName    string `gorm:"column:device_type_name" json:"deviceTypeName"`
	StateName         string `gorm:"column:state_name" json:"stateName"`
}

type DeviceExportModel struct {
	DeviceSn       string     `gorm:"column:device_sn" json:"deviceSn"`              // 设备标识SN
	PreSn          string     `gorm:"column:pre_sn" json:"preSn"`                    // 设备标识SN
	DeviceTypeName string     `gorm:"column:device_type_name" json:"deviceTypeName"` //
	State          uint8      `gorm:"column:state" json:"state"`                     // 状态 1:未启用 2:已部署 3:工作中 4:已报修
	CreateAt       dingo.Time `gorm:"column:create_at" json:"createAt"`              // 创建日期
}
type DeviceBySnIntervalModel struct {
	Sn       int    `gorm:"column:sn" json:"sn"`
	DeviceSn string `gorm:"column:device_sn" json:"deviceSn"`
}

type DeviceIsBingModel struct {
	Sn    int   `gorm:"column:sn" json:"sn"`
	Total int64 `gorm:"column:total" json:"total"`
}

type ActiveDeviceTime struct {
	MaxTime int `gorm:"column:max_time" json:"max_time"`
	MinTime int `gorm:"column:min_time" json:"min_time"`
}
type ActiveDeviceCount struct {
	Total   int64  `gorm:"column:total" json:"total"`
	Date    string `gorm:"column:date" json:"date"`
	PlaceId int    `gorm:"column:place_id" json:"place_id"`
}
